package com.qk.controller;

import com.qk.anno.Log;
import com.qk.entity.Dept;
import com.qk.common.PageResult;
import com.qk.common.Result;
import com.qk.service.DeptService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

@Slf4j//日志,这个注解可以直接有了那个日志记录器
@RequestMapping("/depts")
@RestController
public class DeptController {
    @Autowired
    private DeptService deptService;

    //新增 部门
    // @RequestMapping(value = "/depts",method = RequestMethod.POST)//现在这个请求还没限定具体的请求方法，所以现在这个请求可以匹配get和post请求
    //可以通过method属性限定请求方法
    //当然 还可以简便一下, 使用@RequestMapping.  如下,上边内阁 暂时注释掉
    @Log
    @PostMapping
    public Result add(@RequestBody Dept dept) {
//        System.out.println("新增部门:" + dept);
        log.info("新增部门:" + dept);
        deptService.add(dept);
        return Result.success();
    }

    //列表查询 部门
    //@RequestParam 这个注解一旦加上,表明这个值 你必须传递
    // 参数名必须和前端的参数名一致,可以省略
    //不一致 必须加上
    @GetMapping
    public Result list(String name, Integer status,
                       @RequestParam(defaultValue = "1") Integer page,
                       @RequestParam(defaultValue = "10") Integer pageSize) {

//        System.out.println("列表查询    " + name + "  " + status + "  " + page + "  " + pageSize);
log.info("列表查询    " + name + "  " + status + "  " + page + "  " + pageSize);
        PageResult<Dept> pageResult = deptService.list(name, status, page, pageSize);
        return Result.success(pageResult);

    }

    //根据Id 查询 部门
    @GetMapping("/{id}")
    public Result getById(@PathVariable Integer id) {
        //此处新出现个注解, @PathVariable
        //作用是获取路径中的参数
//        System.out.println("根据Id查询部门:" + id);
        log.info("根据Id查询部门:" + id);
        Dept dept = deptService.getById(id);
        return Result.success(dept);
    }

    //修改 部门
    @Log
    @PutMapping
    public Result update(@RequestBody Dept dept) {
//        System.out.println("修改部门:" + dept);
        log.info("修改部门:" + dept);
        deptService.update(dept);
        return Result.success();
    }

    //删除 部门
    @Log
    @DeleteMapping("/{id}")
    public Result delete(@PathVariable Integer id) {
//        System.out.println("删除部门:" + id);
        log.info("删除部门:" + id);
        deptService.delete(id);
        return Result.success();
    }

    //查询所有 部门
    @GetMapping("/list")
    public Result listAll() {
        System.out.println("查询所有部门信息");
        return Result.success(deptService.listAll());
    }
}
